#ifndef _M_LOGGER_H__ //防止头文件重复包含
#define _M_LOGGER_H__

#include<stdio.h>
#include<time.h>

//定义日志等级
#define INF 0 //表示是提示性质的日志等级
#define DBG 1
#define ERR 2
#define DEFAULT_LOG_LEVEL DBG//默认日志等级

//实现一个自己的日志宏
//format 格式
//...不定参数
//level为输入的日志等级

#define LOG(level, format, ...) do{\// \为行航符,宏不允许不在同一行
    if (DEFAULT_LOG_LEVEL > level) break;\//如果默认日志等级大于传入等级。就不会输入其日志信息
    time_t t = time(NULL);\//获得时间戳
    struct tm *lt = localtime(&t);\//把时间戳进行格式转换
    char buf[32] = {0};\
    strftime(buf, 31, "%H:%M:%S", lt);\
    //把时间转成固定格式的字符串
    fprintf(stdout, "[%s %s:%d] " format "\n", buf, __FILE__, __LINE__, ##__VA_ARGS__);\//打印格式为·[时间：文件名：行号]
    //##__VA_ARGS__ 注意用法，加上##可以不传参调用该日志宏
    }while(0)

#define ILOG(foemat,...) LOG(INF,format,##__VA_ARGS__)//三种不同等级的日志，会传入不同的日志信息
#define DLOG(foemat,...) LOG(DBG,format,##__VA_ARGS__)
#define ELOG(foemat,...) LOG(ERR,format,##__VA_ARGS__)


#endif